package com.gitee.generator.universal.domain;

import java.io.Serializable;

import cn.hutool.core.text.CharSequenceUtil;
import com.gitee.generator.universal.common.DataTypeEnum;
import lombok.Data;

/**
 * [列] TableColumn
 * @since 2020-08-19 11:24
 * @author wsx
 */
@Data
public class TableColumn implements Serializable {
    /** 构造器 */
    public TableColumn() {super();}
    /** serialVersionUID */
    private static final long serialVersionUID = 1L;
    /** 列名 */
    private String columnName;
    /** 列备注 */
    private String remarks;
    /** 列类型 */
    private Integer columnType;
    /** 列类型名称 */
    private String columnTypeName;
    /** 排序 */
    private Integer sortOrder = 1;
    /** 表名 */
    private String tableName;
    /** 大小或数据长度 */
    private Integer size;
    /** 小数位数 */
    private Integer decimalDigits;
    /** 默认值 */
    private String defaultValue;
    /** 是否为可空 */
    private Boolean isNullable;
    /** 是否自增列 */
    private boolean autoIncrement;
    /** 是否主键 */
    private boolean isPk;
    /** 在domain中展示 */
    private boolean showInDomain;

    /** 驼峰状命名 */
    public String getCamelCaseName() {
        return CharSequenceUtil.toCamelCase(columnName);
    }
    /** 帕斯卡命名 */
    public String getPascalCaseName() {
        return CharSequenceUtil.upperFirst(CharSequenceUtil.toCamelCase(columnName));
    }
    /** 下划线命名 */
    public String getUnderlineCaseName() {
        return CharSequenceUtil.upperFirst(CharSequenceUtil.toUnderlineCase(columnName));
    }
    /** 帕斯卡命名，为了兼容代码生成器 */
    public String getFieldName() {
        return getPascalCaseName();
    }
    /** 驼峰命名，为了兼容代码生成器 */
    public String getFieldNameFirstLower() {
        return getCamelCaseName();
    }
    /** 返回类型 */
    public String getFieldType() {
        return DataTypeEnum.getFieldType(columnTypeName);
    }
    /** 是否需要导入字段 */
    public boolean getNeedImport(){
        return DataTypeEnum.needImport(columnTypeName);
    }
    /** 数据库名和对象名不同 */
    public boolean isDbNameNEFieldName(){
        return !this.getColumnName().equals(this.getFieldNameFirstLower());
    }
}